Payload (qdrant)
from Qdrant
https://qdrant.tech/documentation/concepts/payload/
#wip
vectorと一緒に保持できる任意のJSONデータ
例
payload付きでPoint (qdrant)を作成
code:json
PUT /collections/my_collection/points
{
"points": [
{
"id": 1,
"vector": 0.1, 0.2, 0.3, 0.4,
"payload": { "city": "Berlin", "price": 1.99 }
}
]
}
GPT-4.icon
Qdrant の強みの1つが、このペイロードを活用した ベクトル検索 + メタデータフィルター の組み合わせです。
以下に重要なポイントを日本語でわかりやすく解説します。
---
🔷 Payload(ペイロード)とは?
Qdrant では、ベクトルと一緒に 任意の JSON データ を保持できます。
この追加情報を「ペイロード」と呼びます。
例:
code:json
{
"name": "jacket",
"colors": "red", "blue",
"count": 10,
"price": 11.99,
"locations": [
{ "lon": 52.52, "lat": 13.405 }
],
"reviews": [
{ "user": "alice", "score": 4 },
{ "user": "bob", "score": 5 }
]
}
---
🔍 ペイロードで検索できる型(データ型)
Qdrant は以下の型に対して 検索フィルター を適用できます:
table:table
型 説明 例
--- ------ ----
Integer 整数 {"count": 10}
Float 小数 {"price": 11.99}
Bool 真偽値 {"is_delivered": true}
Keyword 文字列 {"name": "Alice"}
Geo 緯度経度 {"location": {"lon": 52.5, "lat": 13.4}}
Datetime 日時(RFC 3339形式) "2023-02-08T10:49:00Z"
UUID UUID文字列 "550e8400-e29b-41d4-a716-446655440000"
🔸 配列にも対応:
{"colors": ["red", "blue"]} のような配列は、「いずれか1つが一致すればOK」として扱われます。
---
📤 ペイロード付きでポイントを作成
code:json
PUT /collections/my_collection/points
{
"points": [
{
"id": 1,
"vector": 0.1, 0.2, 0.3, 0.4,
"payload": { "city": "Berlin", "price": 1.99 }
}
]
}
---
✏️ ペイロードの更新方法
1. Set(部分更新)
既存のペイロードを残したまま、特定のキーを更新:
code:json
POST /collections/{collection_name}/points/payload
{
"payload": { "color": "blue" },
"points": 1
}
またはフィルター指定も可能:
code:json
"filter": {
"must": "key": "color", "match": { "value": "red" } }
}
2. Overwrite(全置換)
ペイロード全体を新しいものに置き換える:
code:json
PUT /collections/{collection_name}/points/payload
{
"payload": { "color": "green" },
"points": 1
}
3. Clear(全削除)
そのポイントのすべてのペイロードを削除:
code:json
POST /collections/{collection_name}/points/payload/clear
{
"points": 1
}
4. Delete Keys(特定キー削除)
ペイロード内の特定キーのみ削除:
code:json
POST /collections/{collection_name}/points/payload/delete
{
"keys": "color", "price",
"points": 1
}
---
⚡ ペイロードのインデックス化(payload index)
ペイロードでの検索を高速化したい場合は、インデックスを作成する必要があります。
code:json
PUT /collections/{collection_name}/index
{
"field_name": "color",
"field_schema": "keyword"
}
インデックスがあると、フィルターやファセット(集計)検索の速度が劇的に改善します。
---
📊 Facet(ファセット検索)
v1.12.0から、SQLの GROUP BY + COUNT(*) のように、値ごとの件数集計ができます。
例:
code:json
POST /collections/{collection_name}/facet
{
"key": "size",
"filter": {
"must": "key": "color", "match": { "value": "red" } }
}
}
レスポンス例:
code:json
"hits": [
{ "value": "L", "count": 19 },
{ "value": "S", "count": 10 },
{ "value": "M", "count": 5 }
]
ファセット集計は UI のフィルター機能やダッシュボード的な用途に便利です。